home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Mac Mania 4
/
MacMania 4.toast
/
/
Demo's
/
Igor Demo Pro
/
3 PutContentsIn Igor Pro Folder
/
Technical Notes
/
Igor Tech Notes
/
TN020-A Custom Peak Meas
/
TN020-A Voigt TEXT
< prev
Wrap
Text File
|
1991-10-17
|
3KB
|
131 lines
Macro PreVoigt()
Silent 1 | calculating data to be used by the voigt function
Variable i,j
Variable H= .201
Variable CO
if( exists("W_RI") != 1 )
Make/N=22 W_b; W_b[1]= 0.7093602E-7
Make/N= 15 W_RI
Make W_XN={10,9,8,8,7,6,5,4,3,3,3,3,3,3,3}
Make W_YN={.6,.6,.6,.5,.4,.4,.3,.3,.3,.3,1,.9,.8,.7,.7}
Make/N=25 W_D0,W_D1,W_D2,W_D3,W_D4,W_HN
Make/N=19 W_NBY2=(19-P)/2
Make W_C={.7093602e-7,-.2518434e-6,.8566874e-6,-.2787638e-5,.866074e-5,-.2565551e-4,0}
W_C[6]={.7228775e-4,-.1933631e-3,.4899520e-3,-.1173267e-2,.2648762e-2,-.5623190e-2,0}
W_C[12]={.1119601e-1,-.2084976e-1,.3621573e-1,-.5851412e-1,.8770816e-1,-.121664,.15584,-.184,.2}
i=0
do
W_RI[i]= -(i+1)/2
i+=1
while(i<15)
i=0
do
W_HN[i]= H*(i+0.5)
CO= 4*W_HN[i]*W_HN[i]/25 - 2
j=1
do
W_b[j+1]= CO*W_b[j]-W_b[j-1]+W_C[j]
j+=1
while(j<21)
W_D0[i]= W_HN[i]*(W_b[21]-W_b[20])/5
W_D1[i]= 1-2*W_HN[i]*W_D0[i]
W_D2[i]= (W_HN[i]*W_D1[i]+W_D0[i])/W_RI[1]
W_D3[i]= (W_HN[i]*W_D2[i]+W_D1[i])/W_RI[2]
W_D4[i]= (W_HN[i]*W_D3[i]+W_D2[i])/W_RI[3]
i+=1
while(i<25)
KillWaves W_C,W_b
endif
Print "You may now delete this macro"
End
Function voigt(x,y)
Variable x,y
Variable i,j
Variable H= .201
Variable Y2,U,V,UU,VV,region,maxv,N,DX,minv
Y2= Y*Y
x= abs(x)
if( (x-5) >= 0 )
if( Y >= (11-.6875*X) )
region= 4;
else
region= 5
endif
else
if( (y-1) > 0 )
if( x > 1.85*(3.6-Y) )
if( Y >= (11-.6875*X) )
region= 4;
else
region= 5
endif
else
region= 2
endif
else
if( x+y >= 5 )
region= 5
else
region= 1
endif
endif
endif
if( region==1 ) | region I
N= trunc(X/H) | Fortran truncates
DX= X-W_HN[n]
U= (((W_D4[N]*Dx+W_D3[N])*Dx+W_D2[N])*DX+W_D1[N])*DX+W_D0[N]
V= 1-2*X*U
| Talyor series expansion about Y=0
VV= exp(y2-X*X)*cos(2*X*Y)/1.128379 - Y*V
UU= -Y
maxv= trunc(5+(12.5-X)*0.8*Y)
i= 1
do
U= (X*V+U)/W_RI[i]
V= (X*U+V)/W_RI[i+1]
UU= -UU*Y2
VV= VV+V*UU
i+=2
while(i<maxv)
return 1.12837*VV
endif
if( region==2 ) | region II
if( Y < 1.45 )
I= trunc(11*Y)
else
I= trunc(2*Y)
endif
j= trunc(x+x+1.85)
maxv=W_XN[j-1]*W_YN[i-1]+.46
minv= trunc(min(16,21-2*maxv))
| evaluate continued fraction
UU= Y
VV= X
j= minv-1
do
U= W_NBY2[j]/(UU*UU+VV*VV)
UU= Y+U*UU
VV= X-U*VV
j+=1
while(j<19)
return UU/(UU*UU+VV*VV)/1.772454
endif
if( region==4 ) | region IIIb
U= X-.7071068
V= X+.7071068
return Y*(.2820948/(Y2+U*U)+.2820948/(Y2+V*V))
endif
if( region==5 ) | region iiia
U= X-.5246476
V= X+.5246476
UU= X-1.65068
VV= X+1.65068
return Y*(.2562121/(Y2+U*U)+.2562121/(Y2+V*V)+.02588268/(Y2+UU*UU)+.02588268/(Y2+VV*VV))
endif
end